<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>函数的定义和调用</title>
<script>
    function fage() {
        alert(`你好逐浪软件`);
    }; 
    function userInfo(name,age){
        alert(`姓名：`+name+`年龄：`+age);
    }
    function book(name,auther){
        document.write(`书名是：《`+name+`》，作者：`+auther);
    }
    let pp="";
    function piao(gao){
        if (gao<1.2) {
            pp=`你可以享受免票`;
        }  else if(gao>1.2&&gao<1.5){
            pp=`你需要购买儿童票`;
        }
        else {
            pp=`你超过一米五了，需要购买全票。`;
        }
        return pp;
    }
function sum(x,y){
    let z=x*y;
    return z;
}
</script>
</head>
<body>
基本调用：    
<!-- <script>userInfo(`张在`,22);</script>     -->
在事件中调用：
<form action="" method="post" name="form1">
<input type="button" value="提交" onclick="fage();">
<!-- 在事件触发时调用自定义函数 -->
</form>
通过链接调用：
<a href="javascript:fage();">快来点我</a>
<h1>输出图书的名称和作者：</h1>
<script>book(`红岩`,`郭老师`);</script>
<hr>
如果儿童身高在1.2米以内，则免票； <br>
如果身体在1.2-1.5米之间，购买儿童票；  <br>
超过1.5米购买全票 <br>
1.3米儿童购买什么票？<br>
<script>
document.write(`身高一米三则`+piao(0.3));
</script>
<hr>
函数可以通过return输出： <br>
<script>
document.write(`10*20=`+sum(10,20));
</script>
<h1>嵌套函数</h1>
指在函数内部再定义其它的函数，如在一个函数内部嵌套定义另一个函数代码如下：
<script>
function outFun(){
    function mm(爸,妈){
        document.write(爸+妈);
    }
    mm(3,922);
}    
document.write(`得到的结果是：`);
outFun();
function mm2(){
    document.write(`</br>从另一个函数中调用:`+outFun());
}
mm2();
</script>
<hr>
取3\6\5三个数字的最大数字： <br>
<script>
function 取最大数(数1,数2,数3){
    let 最大数=数1;
    if(数1<数2){
        最大数=数2;
    }
    if (数2<数3){
        最大数=数3;
    }
    return 最大数;
}
document.write(`3-6-5三个数最大的数是:`+取最大数(3,6,6));
</script>
<hr>
将行数、列数、宽度和高度作为函数进行传递，输出一个5行6列的表格：
<script>
function 建表格(行数,列数,宽度,高度){
    let 表格出来="";
    表格出来+=(`<table width=`+宽度+` height=`+高度+` align=center border=1>`);
    let 背景颜色;
    for(let 参数=0;参数<行数;参数++){
        if(参数/2==0){
            背景颜色=`#ffffff`;
        } else{
            背景颜色=`#eeeeee`;
        }
        表格出来+=(`<tr bgcolor=`+背景颜色+`>`);
        for(let 内循环=0;内循环<列数;内循环++){
            表格出来+=(`<td width=50 align=center></td>`);
        }
        表格出来+=(`</tr>`);
    }
    表格出来+=(`</table>`);
    return 表格出来;
} 
document.write(建表格(5,6,500,150));

</script>
<br> 下面输出表格： <br>
<script>
    document.write(建表格(5,6,500,150));
</script>

<hr>
获取选手的平均分 <br>
我是歌王比赛中，对三个分数的平均分作为该选择的最后得分。<br>
三位评委分别给出91、89、93分，通过嵌套函数实现最后分的算法： <br>
<script>
function 得分(一轮,二轮,三轮){
    let 平均分=(一轮+二轮+三轮)/3;
    return 平均分;
}
function 评委分(一轮,二轮,三轮){
    document.write(`三个评分给出的分别是：`+一轮+`分，`+二轮+`分，`+三轮+`分<br/>`);
    let 总分=得分(一轮,二轮,三轮);
    document.write(`最后总得分是：`+总分);
}
评委分(91,89,93);
</script>

<hr>
将年份和月份作为参数，输出2017年6月的天数 <br>
<script>
function 得出时间(p年,p月,p天) {
    document.write(p年+`年`+p月+`月有：`+p天);
}
function 算一算一月几天(之年,之月){
    if(之月==2){
        if((之年%4==0 && 之年%100 !=0) || (之年%400==0)){
            得出时间(之年,之月,29);
        }else{
            得出时间(之年,之月,28);
        }
    }else if(之月==4||之月==6||之月==9||之月==11){
        得出时间(之年,之月,30);
    }else{
        得出时间(之年,之月,31);
    }
}
算一算一月几天(2021,2);
</script>

<hr>
语文106分，数学116分，外语123分，理科综合236分 <br>
本科录取分数线是550分，嵌套计算该考生的成绩是否达到了本科分数线。 <br>
<script>
function 考试成绩(语文,数学,外语,理科综合){
    let 学生总分=语文+数学+外语+理科综合;
    return 学生总分;
}
function 录取分数(e1,e2,e3,e4){
    let 进档参数=考试成绩(e1,e2,e3,e4);
    document.write(`该考生的总成绩是：`+进档参数+`分。`);
    if (进档参数>=550) {
        document.write(`恭喜你达到了本科分数线`);
    } else {
        document.write(`你的成绩一般没能进本科啦~`);
    }
}
录取分数(106,116,123,236);
</script>

<h1>递归函数</h1>
所谓递归孙数，就是函数在自身的函数体内调用自身，使用时要注意，避免进入死循环，只在特定情况下才使用，如处理阶乘问题。 <br>
<script>
function fak(ad){
    if(ad<=1){
        return 1;
    }else{
        return fak(ad-1)*ad;
    }
}
document.write(`10!的结果为`+fak(10));
</script>

<hr>
数值处理函数之parseInt，将首字为数字的字符串转为数字 <br>
<script>
let a1=`123abc`,a2=`abc123`;
document.write(parseInt(a1)+`<br>`);
document.write(parseInt(a1,2)+`-->这是2进制 <br>`);
document.write(parseInt(a1,10)+`-->这是10进制 <br>`);
document.write(parseInt(a1,8)+`-->这是八进制 <br>`);
document.write(parseInt(a2)+`<br>`);
</script>
<hr>
parseFlot()函数的将首位为字符串的字符转换成浮点数字，如果不是数字开头，转换为NaN <br>
isNaN()用于检测某个值是否为NaN <br>
<script>
let a3=123,a4=`123abc`;
document.write(isNaN(a3)+`<br>`);
document.write(isNaN(a4));
</script>

eval()函数，计算字符串表达式 <br>
<script>
document.write(eval(`3+6`)+`<br>`);
eval(`x=5,y=6;document.write(x*y)`);
</script>

<hr>
encodeURI()函数用于将字符串进行编码 <br>
<script>
let 网址="http://www.z01.com/中国人.html";
document.write(encodeURI(网址));
</script>
decodeURI()用于解码 <br>
<script>
let 来之网址=`http://www.z01.com/%E4%B8%AD%E5%9B%BD%E4%BA%BA.html`;
document.write(decodeURI(来之网址));
</script>
<h1>匿名函数的自定义表达式</h1>
<script>
let a10=function(a11,a12){
    return a11+a12;
}
document.write(`12+22=`+a10(12,22));
</script>
<hr>
输出一个6层楼的金字塔 <br>
<script>
let star=function(层数){
    for(let 星=1;星<=层数;星++){
        for( let 空格=1;空格<=层数-星;空格++){
            document.write(`&nbsp;`);
        }
        for(let 空格=1;空格<=层数;空格++){
            document.write(`*&nbsp;`);
        }
        document.write(`<br>`);
    }
}
star(6);
</script>
<hr>
编写一个判断某个整数是否能同时被3和5整除的匿名函数，在页面中输出1000以内的结果，要求每行显示6个数字 <br>
<script>
let 数字空间=function(数字){
    if(数字%3==0 && 数字%5==0){
        return true;
    } else{
        return false;
    }
}
let 参之1=0;
for( let 变之1=1;变之1<=1000;变之1++){
    if(数字空间(变之1)){
        参之1++;
        document.write(变之1+`\t`);
        if(参之1%6==0){
            document.write(`<br>`);
        }
    }
}
</script>

<hr>
判断mra和密码mrsoft能否登录成功 <br>
<script>
let 来登录=function(用户名,用户密码){
    if (用户名==`mra` && 用户密码==`mrsoft`){
        document.write(`登录成功！`);
    }else{
        document.write(`用户名或密码不正确`);
    }
}
来登录(`mra`,`mrsoft`);
</script>


</body>
</html>